﻿YUI.add('editar-examen-view', function (Y) {
    'use strict';
    Y.EditarExamen = Y.Base.create('EditarExamen', Y.View, [], {
        templateIsCharged: false,
        loadTemplate: function () {
            if (this.template == '') {
                var that = this,
                validator = null,
                request = Y.io('/ExcellentProject/scripts/views/examenes/examenes/templates/editar.html', {
                    on: {
                        complete: function (id, response) {
                            that.templateIsCharged = true;
                            that.template = response.responseText;
                            try {
                                $('#cursos').parent().replaceWith('');
                            }
                            catch (err) {
                                console.log(err);
                            }
                            that.render();
                        }
                    },
                    failure: function (id, response) {
                        alert(response)
                    }
                })
            }
        },
        //template: '',
        events: {
            '.guardar': {
                click: 'guardarExamen'
            }
        },
        render: function () {
            this.loadTemplate();
            if (this.templateIsCharged) {
                var contentTemplate = Y.Handlebars.compile(this.template);
                this.get('container').setHTML(contentTemplate(Y.merge(this.get('model').getAttrs(), { Cuestionarios: this.get('cuestionarios') })));
                var statusList = document.getElementById('estado');
                statusList.options[statusList.options.length] = new Option('Activo', 'Activo');
                statusList.options[statusList.options.length] = new Option('Inactivo', 'Inactivo');
                $('#descripcion').alphanum();
                $('#intentos').numeric();
                $('#tiempoexamen').numeric();
                $.fn.datetimepicker.defaults = {
                    pickDate: true,                 //en/disables the date picker
                    pickTime: true,                 //en/disables the time picker
                    useMinutes: true,               //en/disables the minutes picker
                    useSeconds: true,               //en/disables the seconds picker
                    useCurrent: true,               //when true, picker will set the value to the current date/time     
                    minuteStepping: 1,               //set the minute steppin
                    minDate: '1/1/2014',               //set a minimum date
                    maxDate: '1/1/2050',   //set a maximum date (defaults to today +100 years)
                    showToday: true,                 //shows the today indicator
                    language: 'en',                  //sets language locale
                    defaultDate: "",                 //sets a default date, accepts js dates, strings and moment objects
                    disabledDates: [],               //an array of dates that cannot be selected
                    enabledDates: [],                //an array of dates that can be selected
                    icons: {
                        time: 'fa fa-time',
                        date: 'fa fa-calendar',
                        up: 'fa fa-chevron-up',
                        down: 'fa fa-chevron-down'
                    },
                    useStrict: false,               //use "strict" when validating dates  
                    sideBySide: false,              //show the date and time picker side by side
                    daysOfWeekDisabled: []          //for example use daysOfWeekDisabled: [0,6] to disable weekends 
                };
                $('#datetimepicker1').datetimepicker();
                $('#datetimepicker2').datetimepicker();
                var table = $('#cursos').DataTable({
                    "language": {
                        "search": "Buscar:",
                        "lengthMenu": "Items por página: _MENU_",
                        "info": "Items del _START_ al _END_ de _TOTAL_ items.",
                        "emptyTable": "Items no disponibles.",
                        "infoEmpty": "0 ítems.",
                        "paginate": {
                            "next": "Siguiente",
                            "previous": "Anterior",
                            "first": "Primero",
                            "last": "Ultimo"
                        }
                    },
                    "paging": true,
                    retrieve: true,
                    data: this.get('cursos').toJSON(),
                    "rowCallback": function (row, aData) {
                        $('td:eq(2)', row).html('<input type="radio" name="cursoseleccionado" value="' + aData.Id + '"></input>');
                    },
                    columns: [
                        { data: 'Nombre' },
                        { data: 'Descripcion' },
                        { data: 'Id' }
                    ]
                });
                table.draw();
            }
        },

        guardarExamen: function (ev) {
            var model = this.get('model')
            var requiredMessages = '';

            //validacion de campos requeridos

            if (Y.one('#descripcion').get('value').trim() == '') {
                Y.one('#descripcionGrupo').toggleClass('has-success')
                Y.one('#descripcionGrupo').toggleClass('has-error', true)
                requiredMessages += ' - Descripción requerida. <br/>';

            } else {
                Y.one('#descripcionGrupo').removeClass('has-error')
                Y.one('#descripcionGrupo').toggleClass('has-success', true)
            }

            if (Y.one('#intentos').get('value') == '') {
                Y.one('#intentotiempoGrupo').toggleClass('has-success')
                Y.one('#intentotiempoGrupo').toggleClass('has-error', true)
                requiredMessages += ' - Número de intentos requeridos. <br/>';

            } else {
                Y.one('#intentotiempoGrupo').removeClass('has-error')
                Y.one('#intentotiempoGrupo').toggleClass('has-success', true)
            }

            if (Y.one('#tiempoexamen').get('value') == '') {
                Y.one('#intentotiempoGrupo').toggleClass('has-success')
                Y.one('#intentotiempoGrupo').toggleClass('has-error', true)
                requiredMessages += ' -Tiempo del examen requerido. <br/>';

            } else {
                Y.one('#intentotiempoGrupo').removeClass('has-error')
                Y.one('#intentotiempoGrupo').toggleClass('has-success', true)
            }

            if (Y.one('#fechainicio').get('value') == '') {
                Y.one('#fechasGrupo').toggleClass('has-success')
                Y.one('#fechasGrupo').toggleClass('has-error', true)
                requiredMessages += ' -Fecha Inicio requerida. <br/>';

            } else {
                Y.one('#fechasGrupo').removeClass('has-error')
                Y.one('#fechasGrupo').toggleClass('has-success', true)
            }
            if (Y.one('#fechafin').get('value') == '') {
                Y.one('#fechasGrupo').toggleClass('has-success')
                Y.one('#fechasGrupo').toggleClass('has-error', true)
                requiredMessages += ' -Fecha Fin requerida. <br/>';

            } else {
                Y.one('#fechasGrupo').removeClass('has-error')
                Y.one('#fechasGrupo').toggleClass('has-success', true)
            }

            //Validacion de fechas
            var splitedDate = Y.one('#fechainicio').get('value').split('-');
            var startDate = new Date(parseInt(splitedDate[0]), parseInt(splitedDate[1]), parseInt(splitedDate[2]));
            splitedDate = Y.one('#fechafin').get('value').split('-');
            var endDate = new Date(parseInt(splitedDate[0]), parseInt(splitedDate[1]), parseInt(splitedDate[2]));

            if (startDate.getTime() >= endDate.getTime()) {
                Y.one('#fechasGrupo').removeClass('has-success')
                Y.one('#fechasGrupo').toggleClass('has-error', true)
                requiredMessages += ' - Rango de fechas inválido. La fecha de inicio debe ser menor que la fecha de fin del examen.';
            }
            else {
                Y.one('#fechasGrupo').removeClass('has-error')
                Y.one('#fechasGrupo').toggleClass('has-success', true)
            }
            //Validacion de Tiempo Examen
            var tiempoexa = Y.one('#tiempoexamen').get('value');
            var tiempomaximo = 120;

            if (parseInt(tiempoexa) > tiempomaximo) {
                Y.one('#intentotiempoGrupo').removeClass('has-success')
                Y.one('#intentotiempoGrupo').toggleClass('has-error', true)
                requiredMessages += '-Tiempo muy extenso.';
            }
            else {
                Y.one('#intentotiempoGrupo').removeClass('has-error')
                Y.one('#intentotiempoGrupo').toggleClass('has-success', true)
            }
            //Validacion de Intentos Examen
            var intentosexa = Y.one('#intentos').get('value');
            var intentosmaximo = 5;

            if (parseInt(intentosexa) > intentosmaximo) {
                Y.one('#intentotiempoGrupo').removeClass('has-success')
                Y.one('#intentotiempoGrupo').toggleClass('has-error', true)
                requiredMessages += '- Se excedio el número de intentos.';
            }
            else {
                Y.one('#intentotiempoGrupo').removeClass('has-error')
                Y.one('#intentotiempoGrupo').toggleClass('has-success', true)
            }
            if (requiredMessages != '') {
                bootbox.dialog({
                    message: requiredMessages,
                    title: "Problemas de Validación",
                    show: true,
                    backdrop: true,
                    closeButton: true,
                    animate: true,

                    className: "my-modal",
                    buttons: {
                        success: {
                            label: "Ok",
                            className: "btn btn-info",

                            callback: function () { }
                        }
                    }
                });
                return;
            }
            model.setAttrs({
                IdCuestionario: Y.one('#cuestionarios').get('value'),
                Descripcion: Y.one('#descripcion').get('value'),
                Intentos: Y.one('#intentos').get('value'),
                Fecha: Y.one('#fechainicio').get('value'),
                TiempoExamen: Y.one('#tiempoexamen').get('value'),
                FechaCierre: Y.one('#fechafin').get('value'),
                Estado: Y.one('#estado').get('value'),
                IdCurso: Y.one('[name=cursoseleccionado]:checked').get('value')
            });

            var options = null;
            if ((model.get('IdCalendarizacion') != 0))
                options = { action: 'update', idCalenExa: model.get('IdCalendarizacion') };
            else
                options = { idCalenExa: '' }
            var that = this, a = model.save(options, function (err, response) {
                if (err != null)
                    alert('Ocurrieron problemas para actualizar el exámen' + err)
                else {
                    var data = Y.JSON.parse(response.responseText);
                    model.setAttrs({
                        IdCalendarizacion: data.IdCalendarizacion
                    });

                    //saveCalendarizacion
                    Y.one('#saveCalendarizacion').simulate('click');
                }
            });
            //delay de 2 segundos para evitar lectura sucia
            //setTimeout(null, 2000);
        }
    })
}, '1.0.0.0', { requires: ['handlebars', 'handlebars-select-helper', 'node', 'aui-form-validator', 'examen-consulta-model', 'aui-scheduler', 'event', 'node-event-simulate'] })